package main

type ListNode struct {
   Val int
   Next *ListNode
}

// 删除链表 head 中值等于 val 的节点，并返回删除节点后的链表的头节点
func removeElements(head *ListNode, val int) *ListNode {
   // 最小子问题
   if head == nil {
      return nil
   }
   // 删除除了头节点的子链表中指定值的节点
   head.Next = removeElements(head.Next, val)
   // 处理头节点
   if head.Val == val {
      return head.Next
   } else {
      return head
   }
}
